home *** CD-ROM | disk | FTP | other *** search
/ Power CD / Power CD ATARI-Rechner Lieben.iso / UTILITY / 64ER_EMU / EMUL_C64 / SOURCE / C64.S < prev    next >
Encoding:
Text File  |  1988-12-02  |  39.3 KB  |  1,739 lines

  1. ********************************************************************************
  2. *                                                                              *
  3. *                              C64-Emulator V3.0                               *
  4. *                             © 1987 by Uwe Seimet                             *
  5. *                             Buchenlochstraße 29                              *
  6. *                             6750 Kaiserslautern                              *
  7. *                                                                              *
  8. *                       Linkreihenfolge: C64.O,VC.O,EMULATOR.O                 *
  9. *                                                                              *
  10. ********************************************************************************
  11.  
  12.  
  13. GEMDOS  =  1
  14. XBIOS   = 14
  15.  
  16. AUXIN   = $03
  17. AUXOUT  = $04
  18. PRLINE  = $09
  19. AUXINST = $12
  20. SETDTA  = $1A
  21. OPEN    = $3D
  22. CLOSE   = $3E
  23. READ    = $3F
  24. SETBLOCK= $4A
  25.  
  26. GETREZ  =  4
  27. SSCREEN =  5
  28. SETPALET=  6
  29. SETCOLOR=  7
  30. RSCONF  = 15
  31. IKBDWS  = 25
  32. XBTIMER = 31
  33. SUPEXEC = 38
  34.  
  35.  
  36.         globl print
  37.         globl ret64
  38.         globl jmp64
  39.         globl itscr
  40.         globl graph
  41.         globl grbss
  42.         globl opage
  43.         globl its
  44.  
  45.  
  46.         text
  47.  
  48.         move.l sp,a5
  49.         lea stack,sp
  50.         move.l 4(a5),a5
  51.         move.l 12(a5),d0
  52.         add.l 20(a5),d0
  53.         add.l 28(a5),d0
  54.         add.l #$100,d0
  55.         move.l d0,-(sp)
  56.         move.l a5,-(sp)
  57.         clr -(sp)
  58.         move #SETBLOCK,-(sp)
  59.         trap #GEMDOS
  60.         add.l #12,sp
  61.         tst.l d0
  62.         bne error
  63.         pea msg(pc)
  64.         move #PRLINE,-(sp)
  65.         trap #GEMDOS
  66.         addq.l #6,sp
  67.         moveq #2,d2
  68.         lea fileadr(pc),a2
  69.         lea loadadr(pc),a3
  70. lloop:  clr -(sp)
  71.         move.l (a2)+,-(sp)
  72.         move #OPEN,-(sp)
  73.         trap #GEMDOS
  74.         addq.l #8,sp
  75.         move d0,d7
  76.         bmi error
  77.         move.l (a3)+,-(sp)
  78.         pea $2000
  79.         move d7,-(sp)
  80.         move #READ,-(sp)
  81.         trap #GEMDOS
  82.         add.l #12,sp
  83.         tst.l d0
  84.         bmi error
  85.         move d7,-(sp)
  86.         move #CLOSE,-(sp)
  87.         trap #GEMDOS
  88.         addq.l #4,sp
  89.         tst d0
  90.         bmi error
  91.         dbf d2,lloop
  92.         lea ops,a0
  93.         move.l a0,d0
  94.         add.l #$8000,d0
  95.         move.l d0,opage
  96.         lea op,a1
  97.         clr d2
  98.         move #255,d0
  99. inemu2: move (a1,d2),d1
  100.         lea (a1,d1),a2
  101.         moveq #16,d1
  102. inemu1: move.l (a2)+,(a0)+
  103.         dbf d1,inemu1
  104.         addq #2,d2
  105.         add.l #188,a0
  106.         dbf d0,inemu2
  107.         move #GETREZ,-(sp)
  108.         trap #XBIOS
  109.         addq.l #2,sp
  110.         move d0,rez
  111.         lea prfont,a0
  112.         lea set,a1
  113.         move #511,d4
  114.         cmp #2,d0
  115.         beq conv3
  116.         move #$4e71,colcod
  117.         move #$4e71,colco
  118.         st rezflg
  119. conv3:  moveq #7,d3
  120. conv2:  moveq #7,d2
  121.         move.b (a0)+,d0
  122.         move.b d0,d1
  123. conv1:  tst.b rezflg
  124.         bne conv4
  125.         add.b d1,d1
  126.         roxl (a1)
  127. conv4:  add.b d0,d0
  128.         roxl (a1)+
  129.         dbf d2,conv1
  130.         sub.l #16,a1
  131.         dbf d3,conv2
  132.         add.l #16,a1
  133.         dbf d4,conv3
  134.         tst.b rezflg
  135.         beq conv5
  136.         lea set,a0
  137.         move #4095,d0
  138. conv6:  move.b 1(a0),(a0)
  139.         addq.l #2,a0
  140.         dbf d0,conv6
  141. conv5:  lea sctab,a0
  142.         clr d1
  143.         moveq #24,d0
  144. tabl:   move d1,(a0)+
  145.         add #1280,d1
  146.         dbf d0,tabl
  147.         lea grtab+510,a0
  148.         move #255,d3
  149. bit1:   moveq #7,d2
  150.         move.b d3,d0
  151.         move.b d3,d1
  152. bit0:   add.b d0,d0
  153.         roxl (a0)
  154.         add.b d1,d1
  155.         roxl (a0)
  156.         dbf d2,bit0
  157.         subq.l #2,a0
  158.         dbf d3,bit1
  159.         lea oldcol+32,a3
  160.         moveq #15,d3
  161. savcol: move #-1,-(sp)
  162.         move d3,-(sp)
  163.         move #SETCOLOR,-(sp)
  164.         trap #XBIOS
  165.         addq.l #6,sp
  166.         move d0,-(a3)
  167.         dbf d3,savcol
  168.         pea newcol(pc)
  169.         move #SETPALET,-(sp)
  170.         trap #XBIOS
  171.         addq.l #6,sp
  172.         move.b #$06,c64+$d021
  173.         pea moff(pc)            *Maus abschalten
  174.         clr -(sp)
  175.         move #IKBDWS,-(sp)
  176.         trap #XBIOS
  177.         addq.l #8,sp
  178.         pea base(pc)
  179.         move #SUPEXEC,-(sp)
  180.         trap #XBIOS
  181.         addq.l #6,sp
  182.         cmp #1,rez
  183.         bne rezok
  184.         clr -(sp)
  185.         pea -1
  186.         pea -1
  187.         move #SSCREEN,-(sp)
  188.         trap #XBIOS
  189.         add.l #12,sp
  190. rezok:  pea int(pc)
  191.         move #$cc,-(sp)
  192.         move #7,-(sp)
  193.         clr -(sp)
  194.         move #XBTIMER,-(sp)
  195.         trap #XBIOS
  196.         add.l #12,sp
  197.         pea dta
  198.         move #SETDTA,-(sp)
  199.         trap #GEMDOS
  200.         addq.l #6,sp
  201.         lea c64,a6
  202.         movem.l (a6),d2-d7              *Register löschen
  203.         bset #31,d4
  204.         move.l #$55390d00,file          *Floppy-Reset
  205.         bsr vc1541
  206.         lea area,a2
  207.         move.l opage(pc),a3
  208.         lea c64+$fce2,a5
  209.         moveq #$10,d1
  210.         move.b (a5)+,start+2
  211. start:  jmp 0(a3)                       *ersten Befehl ausführen
  212.  
  213. jmp64:
  214.         move.l d2,d0
  215.         sub #$ff81,d0
  216.         divu #3,d0
  217.         add d0,d0
  218.         add d0,d0
  219.         lea kadr(pc),a0
  220.         move.l (a0,d0),d0
  221.         beq emul
  222.         move.l d0,a0
  223.         jsr (a0)
  224.         lea area,a2
  225.         moveq #$10,d1
  226.         jmp $6000(a3)                   *zum RTS-Opcode
  227. emul:   lea (a6,d2.l),a5
  228.         move.b (a5)+,emu+2
  229. emu:    jmp 0(a3)
  230.  
  231. newcol: dc $000,$777,$600,$067,$707,$040,$003,$770
  232.         dc $740,$420,$721,$444,$333,$373,$457,$222
  233.  
  234. int:
  235.         move.l d0,-(sp)
  236.         move.b c64+$d021,d0
  237.         and #$0f,d0
  238.         add.b d0,d0
  239.         move newcol(pc,d0),$ff8240
  240.         move.b c64+$0286,d0
  241.         cmp.b c0286(pc),d0
  242.         beq noc0
  243.         movem.l a0/d1-d2,-(sp)
  244.         bsr colf1
  245.         movem.l (sp)+,a0/d1-d2
  246. noc0:   tst.l d4                        *Interrupts erlaubt?
  247.         bmi inte                        *nein-
  248.         movem.l d2/d7/a0-a1/a6,-(sp)
  249.         lea c64,a6
  250.         bsr udtim
  251.         tst.b $cc(a6)
  252.         bne int0
  253.         subq.b #1,$cd(a6)
  254.         bne int0
  255.         move.b #$14,$cd(a6)
  256.         clr d7
  257.         move.b $d3(a6),d7
  258.         clr.l d0
  259.         move.b $d2(a6),d0
  260.         asl #8,d0
  261.         move.b $d1(a6),d0
  262.         add d7,d0
  263.         move.b (a6,d0),d7
  264.         move.b $cf(a6),d2
  265.         clr.b $cf(a6)
  266.         tst.b d2
  267.         bne int1
  268.         addq.b #1,$cf(a6)
  269.         move.b d7,$ce(a6)
  270. int1:   move.b $0288(a6),d2
  271.         asl #8,d2
  272.         sub d2,d0
  273.         divu #40,d0
  274.         move d0,d2
  275.         add d2,d2
  276.         swap d0
  277.         ext.l d0
  278.         move d0,d7
  279. colco:  add d0,d0
  280.         move.l scbase(pc),a0
  281.         lea sctab,a1
  282.         add (a1,d2),d0
  283.         add.l d0,a0
  284.         tst.b rezflg
  285.         beq cur0
  286.         and #$fe,d7
  287.         lea coltab(pc),a1
  288.         add (a1,d7),a0
  289.         moveq #7,d0
  290. intc:   move.l plane(pc),d2
  291.         movep.l 0(a0),d7
  292.         not.l d7
  293.         move.l d7,-(sp)
  294.         eor.l d2,d7
  295.         and.l (sp)+,d7
  296.         movep.l d7,0(a0)
  297.         add.l #160,a0
  298.         dbf d0,intc
  299.         bra int0
  300. cur0:   moveq #15,d0
  301. int2:   not (a0)
  302.         add.l #80,a0
  303.         dbf d0,int2
  304. int0:   bsr scn
  305.         movem.l (sp)+,d2/d7/a0-a1/a6
  306. inte:   move.l (sp)+,d0
  307.         bclr #5,$fffa0f
  308.         rte
  309.  
  310. scan:
  311.         trap #0
  312.         rts
  313.  
  314. scn:
  315.         cmp.b #$40,$cb(a6)
  316.         beq scrt
  317.         move.b $cb(a6),d0
  318.         cmp.b $c5(a6),d0
  319.         beq rp
  320.         move.b #$10,$028c(a6)
  321.         bra rep
  322. rp:     tst.b $028a(a6)
  323.         bmi rp1
  324.         btst #6,$028a(a6)
  325.         bne scrt
  326.         move.b stcode(pc),d0
  327.         and #$7f,d0
  328.         cmp.b #$7f,d0
  329.         beq rep
  330.         cmp.b #$14,d0
  331.         beq rp1
  332.         cmp.b #" ",d0
  333.         beq rp1
  334.         cmp.b #$1d,d0
  335.         beq rp1
  336.         cmp.b #$11,d0
  337.         bne scrt
  338. rp1:    tst.b $028c(a6)
  339.         beq rp0
  340.         subq.b #1,$028c(a6)
  341.         bne srt
  342. rp0:    subq.b #1,$028b(a6)
  343.         bne srt
  344.         move.b #$04,$028b(a6)
  345.         cmp.b #$01,$c6(a6)
  346.         bgt srt
  347. rep:    btst #0,$484
  348.         beq nocl
  349.         move.l #click,$e44
  350.         clr.b $e48
  351. nocl:   move.b $c6(a6),d0
  352.         cmp.b $0289(a6),d0
  353.         bge scrt
  354.         ext d0
  355.         lea $0277(a6),a0
  356.         move.b stcode(pc),(a0,d0)
  357.         addq.b #1,$c6(a6)
  358. scrt:   move.b $cb(a6),$c5(a6)
  359.         move.b $028d(a6),$028e(a6)
  360. srt:    rts
  361.  
  362. keyscn:
  363.         tst.b $fffc00
  364.         beq noint
  365.         movem.l a0/a6/d0,-(sp)
  366.         lea c64,a6
  367.         move.b $fffc02,d0
  368.         btst #13,12(sp)                 *Aufruf aus Supervisor-Modus?
  369.         bne nof10                       *ja-        
  370.         cmp.b #$61,d0                   *UNDO-Taste?
  371.         bne undo                        *nein-
  372.         cmp #$47fe,$0318(a6)
  373.         bne tnmi
  374.         cmp.b #$7f,$91(a6)
  375.         bne scon3
  376.         move.l #rs,14(sp)
  377.         bra scon3
  378. tnmi:   move.l #nmi,14(sp)
  379.         bra scon3        
  380. undo:   cmp.b #$62,d0                   *HELP-Taste?
  381.         bne help                        *nein-
  382.         pea msg(pc)
  383.         move #PRLINE,-(sp)
  384.         trap #GEMDOS
  385.         addq.l #6,sp
  386.         bra scon3
  387. help:   cmp.b #$3f,d0                   *F5?
  388.         bne nof5                        *nein-
  389.         addq.b #1,c64+$d021
  390.         and.b #$0f,c64+$d021
  391.         bra scon3
  392. nof5:   cmp.b #$40,d0                   *F6?
  393.         bne nof6                        *nein-
  394.         addq.b #1,c64+$0286
  395.         and.b #$0f,c64+$0286
  396.         bra scon3
  397. nof6:   cmp.b #$41,d0                   *F7?
  398.         bne nof7                        *nein-
  399.         addq #1,$4ee
  400.         bra scon3
  401. nof7:   cmp.b #$42,d0                   *F8?
  402.         bne nof8                        *nein-
  403.         bsr swhi
  404.         cmp.b #"-",ff8
  405.         beq swi0
  406.         move.b #"-",ff8
  407.         bra scon3
  408. swi0:   move.b #"+",ff8
  409.         bra scon3
  410. nof8:   cmp.b #$43,d0                   *F9?
  411.         bne nof9                        *nein-
  412.         bsr swlo
  413.         cmp.b #"-",ff9
  414.         beq swi
  415.         move.b #"-",ff9
  416.         bra scon3
  417. swi:    move.b #"+",ff9
  418.         bra scon3
  419. nof9:   cmp.b #$44,d0                   *F10?
  420.         bne nof10                       *nein-
  421.         move.l #exit,14(sp)
  422.         bra scon3
  423. nof10:  move.b #$40,$cb(a6)
  424.         cmp.b #$2a,d0
  425.         beq key1
  426.         cmp.b #$36,d0
  427.         bne key2
  428. key1:   bset #0,$028d(a6)
  429.         lea c64+$ebc2,a0
  430.         bra scon5
  431. key2:   cmp.b #$aa,d0
  432.         beq key3
  433.         cmp.b #$b6,d0
  434.         bne key4
  435. key3:   bclr #0,$028d(a6)
  436.         lea c64+$eb81,a0
  437.         bra scon5
  438. key4:   cmp.b #$1d,d0
  439.         bne ctrl1
  440.         bset #2,$028d(a6)
  441.         lea c64+$ec78,a0
  442.         bra scon5
  443. ctrl1:  cmp.b #$9d,d0
  444.         bne ctrl2
  445.         bclr #2,$028d(a6)
  446.         lea c64+$eb81,a0
  447.         bra scon5
  448. ctrl2:  cmp.b #$38,d0
  449.         bne alt1
  450.         bset #1,$028d(a6)
  451.         lea c64+$ec03,a0
  452.         bra scon5
  453. alt1:   cmp.b #$b8,d0
  454.         bne alt2
  455.         bclr #1,$028d(a6)
  456.         lea c64+$eb81,a0
  457.         bra scon5
  458. alt2:   cmp.b #$4b,d0
  459.         bne nol
  460.         move.b #$02,$cb(a6)
  461.         move.b #$9d,d0
  462.         bra scon4
  463. nol:    cmp.b #$48,d0
  464.         bne nou
  465.         move.b #$07,$cb(a6)
  466.         move.b #$91,d0
  467.         bra scon4
  468. nou:    cmp.b #$52,d0
  469.         bne noi
  470.         clr.b $cb(a6)
  471.         move.b #$94,d0
  472.         bra scon4
  473. noi:    cmp.b #$63,d0
  474.         bne noo
  475.         move.b #$1b,$cb(a6)
  476.         moveq #$28,d0
  477.         bra scon4
  478. noo:    cmp.b #$64,d0
  479.         bne scon
  480.         move.b #$20,$cb(a6)
  481.         moveq #$29,d0
  482.         bra scon4
  483. scon5:  move.l a0,tab
  484. scon:   ext d0
  485.         bmi scon2
  486.         lea key(pc),a0
  487.         move.b (a0,d0),d0
  488.         move.b d0,$cb(a6)
  489.         move.l tab(pc),a0
  490.         move.b (a0,d0),d0
  491.         cmp.b #$ff,d0
  492.         beq scon2
  493. scon4:  move.b d0,stcode
  494. scon2:  move.b $028d(a6),d0
  495.         cmp.b #$03,d0
  496.         bne scon3
  497.         cmp.b $028e(a6),d0
  498.         beq scon3
  499.         tst.b $0291(a6)
  500.         bmi scon3
  501.         eor.b #$02,c64+$d018
  502. scon3:  movem.l (sp)+,a0/a6/d0
  503. noint:  bclr #6,$fffa11
  504.         rte
  505.  
  506. nmi:
  507.         clr.l d4
  508.         bset #31,d4
  509.         lea area,a2
  510.         move.l opage(pc),a3
  511.         lea c64,a6
  512.         clr.l d2
  513.         clr.l d3
  514.         clr.l d5
  515.         clr.l d6
  516.         clr.l d7
  517.         moveq #$10,d1
  518.         sub.l a6,a5
  519.         move a5,-(a2)
  520.         move.b (a2)+,(a4)
  521.         move.b (a2)+,-(a4)
  522.         move.b d4,-(a4)
  523.         tst.b -(a4)
  524.         lea c64+$fe44,a5
  525.         bra start
  526.  
  527. rs:
  528.         clr.l d4
  529.         bset #31,d4
  530.         lea area,a2
  531.         move.l opage(pc),a3
  532.         lea c64,a6
  533.         clr.l d2
  534.         clr.l d3
  535.         clr.l d5
  536.         clr.l d6
  537.         clr.l d7
  538.         moveq #$10,d1
  539.         sub.l a6,a5
  540.         move a5,-(a2)
  541.         move.b (a2)+,(a4)
  542.         move.b (a2)+,-(a4)
  543.         move.b d4,-(a4)
  544.         move.b d5,-(a4)
  545.         move.b d6,-(a4)
  546.         move.b d7,-(a4)
  547.         tst.b -(a4)
  548.         lea c64+$fe66,a5
  549.         bra start
  550.  
  551. init:
  552.         moveq #$0e,d0
  553.         bsr colf
  554. cls:
  555.         move.b $0288(a6),d7
  556.         or.b #$80,d7
  557.         clr.b d5
  558.         clr.b d6 
  559.         lea $d9(a6),a0
  560. clr0:   move.b d7,(a0,d6)
  561.         add.b #$28,d5
  562.         bcc clr1
  563.         addq.b #1,d7
  564. clr1:   addq.b #1,d6
  565.         cmp.b #$1a,d6
  566.         bne clr0
  567.         st (a0,d6)
  568.         moveq #$18,d6
  569. clr2:   bsr clrline
  570.         subq.b #1,d6
  571.         bpl clr2
  572.         move.l scbase(pc),a1
  573.         move #7999,d0
  574. ccl:    clr.l (a1)+
  575.         dbf d0,ccl
  576. home:
  577.         clr.b $d3(a6)
  578.         clr.b $d6(a6)
  579. curpos:
  580.         move.b $d6(a6),d6
  581. curp1:  lea $d9(a6),a0
  582. cp1:    tst.b (a0,d6)
  583.         bmi cp0
  584.         add.b #$28,$d3(a6)
  585.         subq.b #1,d6
  586.         bpl cp1
  587. cp0:    move.b (a0,d6),d5
  588.         and.b #$03,d5
  589.         or.b $0288(a6),d5
  590.         move.b d5,$d2(a6)
  591.         lea c64+$ecf0,a1
  592.         move.b (a1,d6),$d1(a6)
  593.         moveq #$27,d5
  594.         addq.b #1,d6
  595. cp3:    tst.b (a0,d6)
  596.         bmi cp2
  597.         add.b #$28,d5
  598.         addq.b #1,d6
  599.         bpl cp3
  600. cp2:    move.b d5,$d5(a6)
  601.         rts
  602.  
  603. getchar:
  604.         lea $0277(a6),a0
  605.         move.b (a0),d5
  606.         clr d0
  607. gc:     move.b 1(a0),(a0)+
  608.         addq.b #1,d0
  609.         cmp.b $c6(a6),d0
  610.         bne gc
  611.         subq.b #1,$c6(a6)
  612.         bclr #31,d4
  613.         and.b #$ee,d4
  614.         rts
  615.  
  616. wait:
  617.         bsr bssc
  618. bsin:   move.b $c6(a6),d5
  619.         move.b d5,$cc(a6)
  620.         move.b d5,$0292(a6)
  621.         beq bsin
  622.         bset #31,d4
  623.         tst.b $cf(a6)
  624.         beq bs0
  625.         clr.b $cf(a6)
  626.         move.b $ce(a6),d5
  627.         bsr output
  628. bs0:    bsr getchar
  629.         cmp.b #$83,d5
  630.         bne bs4
  631.         moveq #$09,d6
  632.         bset #31,d4
  633.         move.b d6,$c6(a6)
  634.         lea c64+$ece6,a0
  635.         lea $0276(a6),a1
  636. ldrn:   move.b (a0,d6),(a1,d6)
  637.         subq.b #1,d6
  638.         bne ldrn
  639.         bra bsin
  640. bs4:    cmp.b #$0d,d5
  641.         bne wait
  642.         move.b $d5(a6),d7
  643.         move.b d7,$d0(a6)
  644.         move.b $d2(a6),d2
  645.         asl #8,d2
  646.         move.b $d1(a6),d2
  647.         lea (a6,d2.l),a0
  648. bs2:    move.b (a0,d7),d5
  649.         cmp.b #" ",d5
  650.         bne bs1
  651.         subq.b #1,d7
  652.         bne bs2
  653. bs1:    addq.b #1,d7
  654.         move.b d7,$c8(a6)
  655.         clr.b $0292(a6)
  656.         clr.b $d3(a6)
  657.         clr.b $d4(a6)
  658.         tst.b $c9(a6)
  659.         bmi bs3
  660.         move.b $d6(a6),d6
  661.         lea $d9(a6),a0
  662. bs7:    tst.b (a0,d6)
  663.         bmi bs6
  664.         subq.b #1,d6
  665.         bne bs7
  666. bs6:    bsr vram
  667.         cmp.b $c9(a6),d6
  668.         bne bs3
  669.         move.b $ca(a6),d5
  670.         move.b d5,$d3(a6)
  671.         cmp.b $c8(a6),d5
  672.         blt bs3
  673.         bra bs8
  674.  
  675. basn:
  676.         movem d6-d7,-(sp)
  677.         tst.b $d0(a6)
  678.         beq bsin
  679. bs3:    move.b $d3(a6),d7
  680.         move.b $d2(a6),d0
  681.         asl #8,d0
  682.         move.b $d1(a6),d0
  683.         add d7,d0
  684.         move.b (a6,d0),d5
  685.         move.b d5,d0
  686.         and.b #$3f,d5
  687.         btst #6,d0
  688.         beq bas0
  689.         or.b #$80,d5
  690. bas0:   tst.b d0
  691.         bpl bas1
  692.         tst.b $d4(a6)
  693.         bne bas2
  694. bas1:   btst #5,d0
  695.         bne bas2
  696.         or.b #$40,d5
  697. bas2:   addq.b #1,$d3(a6)
  698.         cmp.b #$22,d5
  699.         bne bas3
  700.         eor.b #$01,$d4(a6)
  701. bas3:   cmp.b $c8(a6),d7
  702.         bne bas4
  703. bs8:    clr.b $d0(a6)
  704.         moveq #$0d,d5
  705.         cmp.b #$03,$99(a6)
  706.         beq bas6
  707.         cmp.b #$03,$9a(a6)
  708.         beq bas4
  709. bas6:   bsr bssc
  710. bas4:   move.b d5,$d7(a6)
  711.         movem (sp)+,d6-d7
  712.         cmp.b #$de,d5
  713.         bne bas5
  714.         st d5
  715. bas5:   and.b #$ee,d4
  716.         rts
  717.  
  718. chrout:
  719.         or.b #$40,d5
  720. chrout1:
  721.         tst.b $c7(a6)
  722.         beq norv
  723. chrout2:
  724.         or.b #$80,d5
  725. norv:   tst.b $d8(a6)
  726.         beq noin
  727.         subq.b #1,$d8(a6)
  728. noin:   bsr output
  729.         bsr msb
  730. lin:    movem (sp)+,d5-d7
  731.         tst.b $d8(a6)
  732.         beq non
  733.         clr.b $d4(a6)
  734. non:    bclr #31,d4
  735.         tst.b d5
  736.         move sr,d4
  737.         rts
  738.  
  739. msb:    bsr msb0
  740.         addq.b #1,$d3(a6)
  741.         move.b $d5(a6),d5
  742.         cmp.b $d3(a6),d5
  743.         bge msb9
  744.         cmp.b #$4f,d5
  745.         beq msb4
  746.         tst.b $0292(a6)
  747.         bne insl
  748.         move.b $d6(a6),d6
  749.         cmp.b #$19,d6
  750.         blt msb5
  751.         bsr scroll
  752.         subq.b #1,$d6(a6)
  753.         move.b $d6(a6),d6
  754. msb5:   lea $d9(a6),a0
  755.         and.b #$7f,(a0,d6)
  756.         or.b #$80,1(a0,d6)
  757.         add.b #$28,$d5(a6)
  758. mb6:    tst.b (a0,d6)
  759.         bmi vram
  760.         subq.b #1,d6
  761.         bne mb6
  762.         bra vram
  763. msb4:   subq.b #1,$d6(a6)
  764.         bsr msb8
  765.         clr.b $d3(a6)
  766. msb9:   rts
  767.  
  768. back:
  769.         move.b $d6(a6),d6
  770.         bne bck0
  771.         move.b d6,$d3(a6)
  772.         addq.l #4,sp
  773.         bra lin
  774. bck0:   subq.b #1,d6
  775.         move.b d6,$d6(a6)
  776.         bsr curp1
  777.         move.b $d5(a6),$d3(a6)
  778.         rts
  779.  
  780. bsout:
  781.         cmp.b #$03,$9a(a6)
  782.         beq bssc
  783.         bgt iecout
  784.         cmp.b #$02,$9a(a6)
  785.         beq rsout
  786.         and.b #$ee,d4
  787.         rts
  788. bssc:   movem d5-d7,-(sp)
  789.         clr.b $d0(a6)
  790.         move.b $d3(a6),d7
  791.         move.b d5,$d7(a6)
  792.         bmi grcode
  793.         cmp.b #$0d,d5
  794.         beq carret
  795.         cmp.b #" ",d5
  796.         blt cd
  797.         cmp.b #$60,d5
  798.         blt gr1
  799.         and.b #$df,d5
  800.         bra gr4
  801. gr1:    and.b #$3f,d5
  802. gr4:    cmp.b #$22,d5
  803.         bne chrout1
  804.         eor.b #$01,$d4(a6)
  805.         bra chrout1
  806. cd:     tst.b $d8(a6)
  807.         bne chrout2
  808.         cmp.b #$14,d5
  809.         bne delc
  810.         tst.b d7
  811.         bne del0
  812.         bsr back
  813.         bra del1
  814. del0:   bsr msb7
  815.         subq.b #1,d7
  816.         move.b d7,$d3(a6)
  817.         move.b $d2(a6),d2
  818.         asl #8,d2
  819.         move.b $d1(a6),d2
  820.         lea (a6,d2.l),a1
  821. del2:   move.b 1(a1,d7),d5
  822.         bsr prscr
  823.         addq.b #1,d7
  824.         cmp.b $d5(a6),d7
  825.         bne del2
  826.         moveq #$20,d5
  827.         bsr prscr
  828.         bra lin
  829. del1:   move.b #" ",(a0,d7)
  830.         bra lin
  831. delc:   tst.b $d4(a6)
  832.         bne chrout2
  833.         cmp.b #$12,d5
  834.         bne revc
  835.         move.b d5,$c7(a6)
  836. revc:   cmp.b #$13,d5
  837.         bne homc
  838.         bsr home
  839. homc:   cmp.b #$1d,d5
  840.         bne rgtc
  841.         addq.b #1,d7
  842.         bsr msb0
  843.         move.b d7,$d3(a6)
  844.         subq.b #1,d7
  845.         cmp.b $d5(a6),d7
  846.         blt lin
  847.         subq.b #1,$d6(a6)
  848.         bsr msb8
  849.         clr.b $d3(a6)
  850.         bra lin
  851. rgtc:   cmp.b #$11,d5
  852.         bne dwnc
  853.         move.b d7,d5
  854.         add.b #$28,d5
  855.         move.b d5,d7
  856.         addq.b #1,$d6(a6)
  857.         cmp.b $d5(a6),d5
  858.         bgt dw0
  859.         move.b d7,$d3(a6)
  860.         bra lin
  861. dw0:    subq.b #1,$d6(a6)
  862. dw2:    sub.b #$28,d5
  863.         blt dw1
  864.         move.b d5,$d3(a6)
  865.         bne dw2
  866. dw1:    bsr msb8
  867.         bra lin
  868. dwnc:   bsr tstcol
  869.         cmp.b #$0e,d5
  870.         bne nsml
  871.         or.b #$02,c64+$d018
  872.         bra lin
  873. nsml:   cmp.b #$08,d5
  874.         bne nlck
  875.         or.b #$80,$0291(a6)
  876.         bra lin
  877. nlck:   cmp.b #$09,d5
  878.         bne lin
  879.         and.b #$7f,$0291(a6)
  880.         bra lin
  881.  
  882. grcode:
  883.         and.b #$7f,d5
  884.         cmp.b #$7f,d5
  885.         bne nopi
  886.         moveq #$5e,d5
  887. nopi:   cmp.b #" ",d5
  888.         bge chrout
  889.         cmp.b #$0d,d5
  890.         beq carret
  891.         tst.b $d4(a6)
  892.         beq grc1
  893. cup:    or.b #$40,d5
  894.         bra chrout2
  895. grc1:   cmp.b #$14,d5
  896.         bne noins
  897.         move.b $d5(a6),d7
  898.         move.b $d2(a6),d2
  899.         asl #8,d2
  900.         move.b $d1(a6),d2
  901.         lea (a6,d2.l),a1
  902.         cmp.b #" ",(a1,d7)
  903.         bne ins1
  904.         cmp.b $d3(a6),d7
  905.         bne ins2
  906. ins1:   cmp.b #$4f,d7
  907.         beq lin
  908.         move.l a1,-(sp)
  909.         bsr insline
  910.         sub #40,d2
  911.         move.l (sp)+,a1
  912. ins2:   move.b $d5(a6),d7
  913. ins3:   move.b -1(a1,d7),d5
  914.         bsr prscr
  915.         subq.b #1,d7
  916.         cmp.b $d3(a6),d7
  917.         bne ins3
  918.         moveq #$20,d5
  919.         bsr prscr
  920.         addq.b #1,$d8(a6)
  921.         bra lin
  922. noins:  tst.b $d8(a6)
  923.         bne cup
  924.         cmp.b #$11,d5
  925.         bne upc
  926.         tst.b $d6(a6)
  927.         beq lin
  928.         subq.b #1,$d6(a6)
  929.         move.b $d3(a6),d5
  930.         sub.b #$28,d5
  931.         blt cp
  932.         move.b d5,$d3(a6)
  933.         bpl lin
  934. cp:     bsr curpos
  935.         bra lin
  936. upc:    cmp.b #$12,d5
  937.         bne rvcd
  938.         clr.b $c7(a6)
  939. rvcd:   cmp.b #$1d,d5
  940.         bne lftc
  941.         tst.b d7
  942.         bne lft0
  943.         bsr back
  944.         bra lin
  945. lft0:   bsr msb7
  946.         subq.b #1,d7
  947.         move.b d7,$d3(a6)
  948.         bra lin
  949. lftc:   cmp.b #$13,d5
  950.         bne clcd
  951.         bsr cls
  952.         bra lin
  953. clcd:   or.b #$80,d5
  954.         bsr tstcol
  955.         cmp.b #$8e,d5
  956.         bne lin
  957.         bclr #1,c64+$d018
  958.         bra lin
  959.  
  960. tstcol:
  961.         lea c64+$e8da,a0
  962.         moveq #15,d0
  963. fcol:   cmp.b (a0,d0),d5
  964.         beq colf
  965.         dbf d0,fcol
  966.         rts
  967. colf:   move.b d0,$0286(a6)
  968. colf1:  add d0,d0
  969.         add d0,d0
  970.         move.l pencol(pc,d0),plane
  971.         rts
  972.  
  973. pencol: dc.l $ffff0000,$00ffffff,$ff00ffff,$0000ffff
  974.         dc.l $ffff00ff,$00ff00ff,$ff0000ff,$ffffffff
  975.         dc.l $ff00ffff,$00ffff00,$ff00ff00,$0000ff00
  976.         dc.l $000000ff,$00ff0000,$ff000000,$00ff0000
  977.  
  978. prscr:
  979.         move.b d5,(a1,d7)
  980.         move.l a1,-(sp)
  981.         move.l d7,d0
  982.         add d2,d0
  983.         bsr toscr
  984.         move.l (sp)+,a1
  985.         rts
  986.  
  987. carret:
  988.         clr.b $d8(a6)
  989.         clr.b $c7(a6)
  990.         clr.b $d4(a6)
  991.         clr.b $d3(a6)
  992.         bsr msb8
  993.         bra lin
  994. msb8:   clr.b $c9(a6)
  995.         move.b $d6(a6),d6
  996. n0d2:   addq.b #1,d6
  997.         cmp.b #$19,d6
  998.         bne n0d1
  999.         bsr scroll
  1000. n0d1:   lea $d9(a6),a0
  1001.         tst.b (a0,d6)
  1002.         bpl n0d2
  1003.         move.b d6,$d6(a6)
  1004.         bra curpos
  1005.  
  1006. msb7:
  1007.         moveq #$02,d6
  1008.         clr.b d5
  1009. ms0:    cmp.b $d3(a6),d5
  1010.         beq ms1
  1011.         add.b #$28,d5
  1012.         subq.b #1,d6
  1013.         bne ms0
  1014.         rts
  1015. ms1:    subq.b #1,$d6(a6)
  1016.         rts
  1017.  
  1018. msb0:
  1019.         moveq #$02,d6
  1020.         moveq #$27,d5
  1021. mb8:    cmp.b $d3(a6),d5
  1022.         beq mb9
  1023.         add.b #$28,d5
  1024.         subq.b #1,d6
  1025.         bne mb8
  1026.         rts
  1027. mb9:    move.b $d6(a6),d6
  1028.         cmp.b #$19,d6
  1029.         beq mb7
  1030.         addq.b #1,$d6(a6)
  1031. mb7:    rts
  1032.  
  1033. scroll:
  1034.         move.l $ac(a6),-(sp)
  1035. ll5:    st d6
  1036.         subq.b #1,$d6(a6)
  1037.         subq.b #1,$c9(a6)
  1038.         subq.b #1,$02a5(a6)
  1039. ll1:    addq.b #1,d6
  1040.         bsr vram
  1041.         cmp.b #$18,d6
  1042.         bge ll0
  1043.         lea c64+$ecf1,a0
  1044.         move.b (a0,d6),$ac(a6)
  1045.         lea $da(a6),a0
  1046.         move.b (a0,d6),d5
  1047.         bsr moveup
  1048.         bra ll1
  1049. ll0:    bsr clrline
  1050.         clr.b d6
  1051.         lea $d9(a6),a0
  1052. ll4:    move.b (a0,d6),d5
  1053.         and.b #$7f,d5
  1054.         move.b 1(a0,d6),d7
  1055.         bpl ll3
  1056.         or.b #$80,d5
  1057. ll3:    move.b d5,(a0,d6)
  1058.         addq.b #1,d6
  1059.         cmp.b #$18,d6
  1060.         bne ll4
  1061.         or.b #$80,$f1(a6)
  1062.         tst.b $d9(a6)
  1063.         bpl ll5
  1064.         addq.b #1,$d6(a6)
  1065.         addq.b #1,$02a5(a6)
  1066.         btst #2,$028d(a6)
  1067.         beq ll7
  1068.         moveq #-1,d0
  1069. ll8:    nop
  1070.         dbf d0,ll8
  1071. ll7:    btst #1,$028d(a6)
  1072.         bne ll7
  1073.         move.b $d6(a6),d6
  1074.         move.l (sp)+,$ac(a6)
  1075.         rts
  1076.  
  1077. insline:
  1078.         move.b $d6(a6),d6
  1079. insl:   lea $d9(a6),a0
  1080. il0:    addq.b #1,d6
  1081.         tst.b (a0,d6)
  1082.         bpl il0
  1083.         move.b d6,$02a5(a6)
  1084.         cmp.b #$18,d6
  1085.         ble inslin
  1086.         bsr scroll
  1087.         move.b $02a5(a6),d6
  1088.         subq.b #1,d6
  1089.         subq.b #1,$d6(a6)
  1090.         bra msb5
  1091.  
  1092. inslin:
  1093.         move.l $ac(a6),-(sp)
  1094.         moveq #$19,d6
  1095. insl1:  subq.b #1,d6
  1096.         bsr vram
  1097.         cmp.b $02a5(a6),d6
  1098.         ble inl0
  1099.         lea $d8(a6),a0
  1100.         lea c64+$ecef,a1
  1101.         move.b (a1,d6),$ac(a6)
  1102.         move.b (a0,d6),d5
  1103.         st mflg
  1104.         bsr moveup
  1105.         bra insl1
  1106. inl0:   bsr clrline
  1107.         moveq #$17,d6
  1108. ins6:   cmp.b $02a5(a6),d6
  1109.         blt ins8
  1110.         move.b 2(a0,d6),d5
  1111.         and.b #$7f,d5
  1112.         tst.b 1(a0,d6)
  1113.         bpl ins7
  1114.         or.b #$80,d5
  1115. ins7:   move.b d5,2(a0,d6)
  1116.         subq.b #1,d6
  1117.         bne ins6
  1118. ins8:   move.b $02a5(a6),d6
  1119.         bsr msb5
  1120.         move.l (sp)+,$ac(a6)
  1121.         rts
  1122.  
  1123. moveup:
  1124.         and.b #$03,d5
  1125.         or.b $0288(a6),d5
  1126.         move.b d5,$ad(a6)
  1127.         moveq #$27,d7
  1128.         move.b $ad(a6),d2
  1129.         asl #8,d2
  1130.         move.b $ac(a6),d2
  1131.         lea (a6,d2.l),a0
  1132.         move.b $d2(a6),d2
  1133.         asl #8,d2
  1134.         move.b $d1(a6),d2
  1135.         lea (a6,d2.l),a1
  1136. movu:   move.b (a0,d7),(a1,d7)
  1137.         subq.b #1,d7
  1138.         bpl movu
  1139.         clr.l d0
  1140.         move.b d6,d0                    *Nummer der Bildschirmzeile
  1141.         mulu #1280,d0
  1142.         move.l scbase(pc),a0
  1143.         add.l d0,a0
  1144.         move.l a0,a1
  1145.         add.l #1280,a1
  1146.         move #319,d0
  1147.         tst.b mflg
  1148.         beq movu1
  1149.         clr.b mflg
  1150.         sub.l #1280,a0
  1151.         sub.l #1280,a1
  1152.         exg.l a0,a1
  1153. movu1:  move.l (a1)+,(a0)+
  1154.         dbf d0,movu1
  1155.         rts
  1156.  
  1157. vram:
  1158.         lea $d9(a6),a0
  1159.         lea c64+$ecf0,a1
  1160.         move.b (a1,d6),$d1(a6)
  1161.         move.b (a0,d6),d5
  1162.         and.b #$03,d5
  1163.         or.b $0288(a6),d5
  1164.         move.b d5,$d2(a6)
  1165.         rts
  1166.  
  1167. clrline:
  1168.         clr.l d0
  1169.         move.b d6,d0                    *Nummer der Bildschirmzeile
  1170.         mulu #1280,d0
  1171.         move.l scbase(pc),a0
  1172.         add.l d0,a0
  1173.         move #319,d0
  1174. cll1:   clr.l (a0)+
  1175.         dbf d0,cll1
  1176.         moveq #$27,d7
  1177.         bsr vram
  1178.         move.b $d2(a6),d2
  1179.         asl #8,d2
  1180.         move.b $d1(a6),d2
  1181.         lea (a6,d2.l),a0
  1182. clln:   move.b #" ",(a0,d7)
  1183.         subq.b #1,d7
  1184.         bpl clln
  1185.         rts
  1186.  
  1187. rsin:
  1188.         move #AUXIN,-(sp)
  1189.         trap #GEMDOS
  1190.         addq.l #2,sp
  1191.         move.b d0,d5
  1192.         bra rt
  1193.  
  1194. rsout:
  1195.         move d5,-(sp)
  1196.         move #AUXOUT,-(sp)
  1197.         trap #GEMDOS
  1198.         addq.l #4,sp
  1199.         bra rt
  1200.  
  1201. talk:
  1202.         bra rt
  1203.  
  1204. lstn:
  1205.         cmp.b #$04,d5                   *Drucker?
  1206.         beq rt                          *ja-
  1207.         move.l #file,compnt
  1208. rt:     and.b #$ee,d4
  1209.         rts
  1210.  
  1211. seclstn:
  1212.         move.b d5,$b9(a6)
  1213.         rts
  1214.  
  1215. sectalk:
  1216.         move.b d5,$b9(a6)
  1217.         rts
  1218.  
  1219. iecout:
  1220.         cmp.b #$04,$ba(a6)              *Drucker?
  1221.         bne vcwrite                     *nein-
  1222.         bsr printer
  1223.         bra rt
  1224.  
  1225. untalk:
  1226.         bra rt
  1227.  
  1228. unlstn:
  1229.         cmp.b #$04,$ba(a6)              *Drucker?
  1230.         beq rt                          *ja-
  1231.         move.l compnt,a0
  1232.         clr.b (a0)
  1233.         bra vc1541
  1234.  
  1235. iecin:
  1236.         cmp.b #$04,$ba(a6)              *Drucker?
  1237.         beq rt                          *ja-
  1238.         bra vcread
  1239.  
  1240. open:
  1241.         move #$f70a,d0                  *"NOT INPUT FILE"
  1242.         move.b $b8(a6),d6
  1243.         beq ret64
  1244.         move #$f6fe,d0                  *"FILE OPEN"
  1245.         bsr slog                        *logische Filenummer suchen
  1246.         beq ret64
  1247.         move #$f6fb,d0                  *"TOO MANY FILES"
  1248.         move.b $98(a6),d6
  1249.         cmp.b #10,d6
  1250.         bcc ret64
  1251.         addq.b #1,$98(a6)
  1252.         lea $0259(a6),a0
  1253.         move.b $b8(a6),(a0,d6)          *logische Filenummer
  1254.         or.b #$60,$b9(a6)
  1255.         move.b $b9(a6),20(a0,d6)        *Sekundäradresse
  1256.         move.b $ba(a6),10(a0,d6)        *Geräteadresse
  1257.         beq opsc                        *Bildschirmfile-
  1258.         cmp.b #$02,$ba(a6)              *RS232?
  1259.         beq rsopen                      *ja-
  1260.         move.b $b9(a6),d0
  1261.         and.b #$0f,d0
  1262.         cmp.b #$0f,d0                   *Kommandokanal?
  1263.         beq comcan                      *ja-
  1264.         move.b $b8(a6),d0               *logische Filenummer
  1265.         bsr vcopen
  1266. opsc:   bra rt
  1267. comcan: move.b $b7(a6),d7
  1268.         beq rt                          *kein Kommandostring-
  1269.         move.b $ba(a6),d5
  1270.         bsr lstn
  1271.         move.b $bc(a6),d2
  1272.         asl #8,d2
  1273.         move.b $bb(a6),d2
  1274. copcom: move.b (a6,d2.l),d5
  1275.         bsr iecout                      *String an Floppy senden
  1276.         addq #1,d2
  1277.         subq.b #1,d7
  1278.         bne copcom
  1279.         bra unlstn
  1280.  
  1281. rsopen:
  1282.         clr.b $0297(a6)                 *RS232 Status löschen
  1283.         tst.b $b7(a6)
  1284.         beq norsn
  1285.         clr.l d1
  1286.         move.b $bc(a6),d1
  1287.         asl #8,d1
  1288.         move.b $bb(a6),d1
  1289.         add #3,d1
  1290.         lea $0293(a6),a0
  1291.         moveq #3,d0
  1292. coprs:  move.b (a6,d1.l),(a0,d0)
  1293.         subq #1,d1
  1294.         dbf d0,coprs
  1295. norsn:  move.b (a0),d5
  1296.         and.b #$0f,d5                   *Bits für Baud-Rate
  1297.         move d5,d0
  1298.         add d0,d0
  1299.         moveq #-1,d1
  1300.         move d1,-(sp)
  1301.         move d1,-(sp)
  1302.         move d1,-(sp)
  1303.         move #%10001000,-(sp)
  1304.         clr -(sp)
  1305.         move baud(pc,d0),-(sp)              *Baud-Rate
  1306.         move #RSCONF,-(sp)
  1307.         trap #XBIOS
  1308.         add.l #14,sp
  1309.         bra rt
  1310.  
  1311. baud:   dc -1,15,14,13,12,11,9,8,7,6,4,3,2,-1,1,0
  1312.  
  1313. close:
  1314.         bsr sloga                       *logische Filenummer suchen
  1315.         bne clrts                       *nicht gefunden-
  1316.         bsr sfpar                       *Fileparameter setzen
  1317.         cmp.b #$03,$ba(a6)
  1318.         bcs clos                        *kein IEC-File-
  1319.         move.b $b9(a6),d0
  1320.         and.b #$0f,d0
  1321.         cmp.b #$0f,d0                   *Kommandokanal?
  1322.         beq clos                        *ja-
  1323.         move.b $b8(a6),d0               *logische Filenummer
  1324.         bsr vcclose
  1325. clos:   subq.b #1,$98(a6)
  1326.         cmp.b $98(a6),d6
  1327.         beq clrts
  1328.         lea $0259(a6),a0
  1329.         move.b $98(a6),d7
  1330.         move.b (a0,d7),(a0,d6)
  1331.         move.b 10(a0,d7),10(a0,d6)
  1332.         move.b 20(a0,d7),20(a0,d6)
  1333. clrts:  bra rt
  1334.  
  1335. chkin:
  1336.         move #$f701,d0                  *"FILE NOT OPEN"
  1337.         bsr slog                        *logische Filenummer suchen
  1338.         bne ret64
  1339.         bsr sfpar                       *Fileparameter setzen
  1340.         move.b $ba(a6),d5
  1341.         cmp.b #$08,d5                   *Floppy?
  1342.         blt chkscr                      *nein-
  1343.         move.b $b8(a6),d0               *logische Filenummer
  1344.         bsr vcchkin
  1345. chkscr: move.b d5,$99(a6)
  1346.         bra rt
  1347.  
  1348. ckout:
  1349.         move #$f701,d0                  *"FILE NOT OPEN"
  1350.         bsr slog                        *logische Filenummer suchen
  1351.         bne ret64
  1352.         bsr sfpar
  1353.         move #$f70d,d0                  *"NOT OUTPUT FILE"
  1354.         move.b $ba(a6),d5
  1355.         beq ret64
  1356.         cmp.b #$08,d5                   *Floppy?
  1357.         blt ckout2                      *nein-
  1358.         move.b $b8(a6),d0
  1359.         bsr vckout
  1360. ckout2: move.b d5,$9a(a6)
  1361.         bra rt
  1362.  
  1363. sfpar:
  1364.         lea $0259(a6),a0
  1365.         move.b (a0,d6),$b8(a6)          *logische Filenummer
  1366.         move.b 10(a0,d6),$ba(a6)        *Geräteadresse
  1367.         move.b 20(a0,d6),$b9(a6)        *Sekundäradresse
  1368.         rts
  1369.  
  1370. slog:
  1371.         clr.b $90(a6)
  1372.         move.b d6,d5
  1373. sloga:  lea $0259(a6),a0
  1374.         move.b $98(a6),d6
  1375. slog0:  subq.b #1,d6
  1376.         bmi slog1
  1377.         cmp.b (a0,d6),d5
  1378.         bne slog0
  1379. slog1:  rts
  1380.  
  1381. output:
  1382.         clr.l d0
  1383.         move.b #$02,$cd(a6)
  1384.         move.b $d2(a6),d0
  1385.         asl #8,d0
  1386.         move.b $d1(a6),d0
  1387.         move.b $d3(a6),d7
  1388.         add d7,d0
  1389.         move.b d5,(a6,d0)
  1390. toscr:  move.b $0288(a6),d1
  1391.         asl #8,d1
  1392.         sub d1,d0
  1393. itscr:  divu #40,d0
  1394.         move d0,d1
  1395.         add d1,d1
  1396.         swap d0
  1397.         ext.l d0
  1398.         move.b d0,d3
  1399. colcod: add d0,d0
  1400.         move.l scbase(pc),a0
  1401.         lea sctab,a1
  1402.         add (a1,d1),d0
  1403.         add.l d0,a0
  1404.         move d5,d0
  1405.         asl #4,d0
  1406.         btst #1,c64+$d018
  1407.         beq big
  1408.         add.l #$1000,d0
  1409. big:    lea set,a1
  1410.         add.l d0,a1
  1411.         moveq #7,d0
  1412.         tst.b rezflg
  1413.         bne chr1
  1414. chr:    move (a1),(a0)
  1415.         move (a1)+,80(a0)
  1416.         add.l #160,a0
  1417.         dbf d0,chr
  1418.         rts
  1419. chr1:   and #$fe,d3
  1420.         add coltab(pc,d3),a0
  1421. chr2:   move (a1),d1
  1422.         swap d1
  1423.         move (a1)+,d1
  1424.         move.l d1,-(sp)
  1425.         move.l plane(pc),d3
  1426.         eor.l d3,d1
  1427.         and.l (sp)+,d1
  1428.         movep.l d1,0(a0)
  1429.         add.l #160,a0
  1430.         dbf d0,chr2
  1431.         clr.l d3
  1432.         rts
  1433.         
  1434. coltab: dc 0,6,12,18,24,30,36,42,48,54
  1435.         dc 60,66,72,78,84,90,96,102,108,114
  1436.  
  1437. its:    bsr itscr
  1438.         jmp itret
  1439.  
  1440. graph:
  1441.         divu #320,d2            *Bildschirmzeile
  1442.         move d2,d0
  1443.         tst.b rezflg
  1444.         bne colgr
  1445.         asl #4,d0               *grobe Pixelzeile
  1446.         clr d2
  1447.         swap d2
  1448.         divu #8,d2
  1449.         move d2,d1              *Bildschirmspalte
  1450.         swap d2                 *feine Pixelzeile
  1451.         add d2,d0               *y-Koordinate
  1452.         add d2,d0
  1453.         add d1,d1               *grobe Pixelspalte
  1454.         mulu #80,d0
  1455.         move.l scbase(pc),a0
  1456.         add.l d0,a0
  1457.         add d1,a0
  1458.         lea grtab,a1
  1459.         add d5,d5
  1460.         move (a1,d5),(a0)
  1461.         move (a1,d5),80(a0)
  1462.         clr.l d2
  1463.         jmp itret
  1464. colgr:  asl #3,d0               *grobe Pixelzeile
  1465.         clr d2
  1466.         swap d2
  1467.         divu #8,d2
  1468.         move d2,d1              *Bildschirmspalte
  1469.         swap d2                 *feine Pixelzeile
  1470.         add d2,d0               *y-Koordinate
  1471.         mulu #160,d0
  1472.         add d1,d0
  1473.         and #$fe,d1
  1474.         lea coltab(pc),a0
  1475.         add (a0,d1),d0
  1476.         move.l scbase(pc),a0
  1477.         add.l d0,a0
  1478.         move.b d5,d0
  1479.         asl #8,d0
  1480.         move.b d5,d0
  1481.         move d0,d5
  1482.         swap d5
  1483.         move d0,d5
  1484.         movep.l d5,0(a0)
  1485.         clr.l d5
  1486.         clr.l d2
  1487.         jmp itret
  1488.  
  1489. get:
  1490.         move.b $99(a6),d5
  1491.         bne get9
  1492.         tst.b $c6(a6)
  1493.         beq grt
  1494.         bset #31,d4
  1495.         bra getchar
  1496. get9:   cmp.b #$02,d5
  1497.         bne get0
  1498.         move #AUXINST,-(sp)
  1499.         trap #GEMDOS
  1500.         addq.l #2,sp
  1501.         tst d0
  1502.         beq nochr
  1503.         and.b #$f7,$0297(a6)
  1504.         move #AUXIN,-(sp)
  1505.         trap #GEMDOS
  1506.         addq.l #2,sp
  1507.         move.b d0,d5
  1508.         rts
  1509. nochr:  or.b #$08,$0297(a6)
  1510.         clr.b d5
  1511.         rts
  1512. grt:    move sr,d4
  1513.         bra rt
  1514.         
  1515. basin:
  1516.         move.b $99(a6),d5
  1517.         bne get0
  1518.         move.b $d3(a6),$ca(a6)
  1519.         move.b $d6(a6),$c9(a6)
  1520.         bra basn
  1521. get0:   cmp.b #$03,d5
  1522.         bne get1
  1523.         move.b d5,$d0(a6)
  1524.         move.b $d5(a6),$c8(a6)
  1525.         bra basn
  1526. get1:   cmp.b #$02,d5
  1527.         beq rsin
  1528.         tst.b $90(a6)
  1529.         beq iecin
  1530.         moveq #$0d,d5
  1531.         bra rt
  1532.  
  1533. udtim:
  1534.         addq.b #1,$a2(a6)
  1535.         bne ti
  1536.         addq.b #1,$a1(a6)
  1537.         bne ti
  1538.         addq.b #1,$a0(a6)
  1539. ti:     move.b $a2(a6),d2
  1540.         subq.b #1,d2
  1541.         move.b $a1(a6),d2
  1542.         moveq #$1a,d0
  1543.         subx.b d0,d2
  1544.         move.b $a0(a6),d2
  1545.         moveq #$4f,d0
  1546.         subx.b d0,d2
  1547.         blt ud
  1548.         clr $a0(a6)
  1549.         clr.b $a2(a6)
  1550. ud:     clr.b $91(a6)
  1551.         cmp.b #$3f,$cb(a6)
  1552.         bne udr
  1553.         btst #0,$028d(a6)
  1554.         bne udr
  1555.         move.b #$7f,$91(a6)
  1556. udr:    rts
  1557.  
  1558. print:
  1559.         tst.b $9d(a6)
  1560.         bpl pri
  1561.         movem d5-d7,-(sp)
  1562. sys:    move.b (a2)+,d5
  1563.         beq prg
  1564.         bmi epr
  1565.         bsr bsout
  1566.         bra sys
  1567. epr:    and.b #$7f,d5
  1568.         bsr bsout
  1569. prg:    movem (sp)+,d5-d7
  1570. pri:    rts
  1571.  
  1572. base:
  1573.         sub.l a0,a0
  1574.         move.l $44e(a0),scbase
  1575.         move.l #scn,$80(a0)
  1576.         move.l $118(a0),keysav
  1577.         move.l #keyscn,$118(a0)
  1578.         move.l $400(a0),evntsav
  1579.         move.l $404(a0),critsav
  1580.         move.l #crit,$400(a0)
  1581.         move.l #crit,$404(a0)
  1582.         clr $454(a0)
  1583. crit:   rts
  1584.  
  1585. con:    sub.l a0,a0
  1586.         move.l keysav,$118(a0)
  1587.         move.l evntsav,$400(a0)
  1588.         move.l critsav,$404(a0)
  1589.         move #$08,$454(a0)
  1590.         rts
  1591.  
  1592. ret64:
  1593.         subq #1,d0
  1594.         move.b d0,-1(a4)
  1595.         lsr #8,d0
  1596.         move.b d0,(a4)
  1597.         subq.l #2,a4
  1598.         rts
  1599.  
  1600. exit:
  1601.         clr.l -(sp)
  1602.         clr -(sp)
  1603.         clr -(sp)
  1604.         clr -(sp)
  1605.         move #XBTIMER,-(sp)
  1606.         trap #XBIOS
  1607.         add.l #12,sp
  1608.         pea con(pc)
  1609.         move #SUPEXEC,-(sp)
  1610.         trap #XBIOS
  1611.         addq.l #6,sp
  1612.         pea mon(pc)             *Maus einschalten
  1613.         move #1,-(sp)
  1614.         move #IKBDWS,-(sp)
  1615.         trap #XBIOS
  1616.         addq.l #8,sp
  1617.         move rez(pc),-(sp)
  1618.         pea -1
  1619.         pea -1
  1620.         move #SSCREEN,-(sp)
  1621.         trap #XBIOS
  1622.         add.l #12,sp
  1623.         pea oldcol
  1624.         move #SETPALET,-(sp)
  1625.         trap #XBIOS
  1626.         addq.l #6,sp
  1627. error:  clr -(sp)
  1628.         trap #GEMDOS
  1629.  
  1630.  
  1631. kadr:
  1632.         ds.l 6
  1633.         dc.l seclstn,sectalk
  1634.         ds.l 2
  1635.         dc.l scan
  1636.         ds.l 1
  1637.         dc.l iecin,iecout
  1638.         dc.l untalk,unlstn
  1639.         dc.l lstn,talk
  1640.         ds.l 3
  1641.         dc.l open,close
  1642.         dc.l chkin,ckout
  1643.         ds.l 1
  1644.         dc.l basin,bsout
  1645.         dc.l fload,fsave
  1646.         ds.l 3
  1647.         dc.l get
  1648.         ds.l 1
  1649.         dc.l udtim
  1650.         ds.l 3
  1651.         dc.l init
  1652.  
  1653. key:
  1654.         dc.b $40,$39,$38,$3b,$08,$0b,$10,$13,$18,$1b,$20,$23,$28,$2b,$00,$3f
  1655.         dc.b $3e,$09,$0e,$11,$16,$0c,$1e,$21,$26,$29,$2e,$31,$01,$40,$0a,$0d
  1656.         dc.b $12,$15,$1a,$1d,$22,$25,$2a,$2d,$32,$36,$40,$40,$19,$17,$14,$1f
  1657.         dc.b $1c,$27,$24,$2f,$2c,$37,$40,$40,$40,$3c,$40,$04,$05,$06,$03,$40
  1658.         dc.b $40,$40,$40,$40,$40,$40,$40,$33,$40,$40,$2b,$40,$40,$02,$28,$40
  1659.         dc.b $07,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40
  1660.         dc.b $40,$40,$40,$40,$40,$37,$31,$18,$1b,$20,$0b,$10,$13,$38,$3b,$08
  1661.         dc.b $23,$2c,$01,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40
  1662.  
  1663. basic:  dc.b "c64\_basic.c64",0
  1664.  
  1665. kernal: dc.b "c64\_kernal.c64",0
  1666.  
  1667. font:   dc.b "c64\_font.c64",0
  1668.  
  1669. fileadr:dc.l basic,kernal,font
  1670.  
  1671. loadadr:dc.l c64+$a000,c64+$e000,prfont
  1672.  
  1673. opage:  ds.l 1
  1674.  
  1675. moff:   dc.b $12
  1676.  
  1677. mon:    dc.b $80,$01
  1678.  
  1679. scbase: ds.l 1
  1680.  
  1681. plane:  ds.b 4
  1682.  
  1683. click:  dc.b 0,$3b,1,0,2,0,3,0,4,0,5,0,6,0,7,$fe,8,16,13,3,11,$80,12,1,$ff,0
  1684.  
  1685. stcode: dc.b 0
  1686.  
  1687. c0286:  ds.b 1
  1688.  
  1689. tab:    dc.l c64+$eb81          *Default-Tastaturtabelle
  1690.  
  1691. rez:    ds 1
  1692.  
  1693. msg:    dc.b $1b,"E",$1b,"fC64-Emulator V3.00",$0d,$0a,$0a
  1694.         dc.b " © 1987 by",$0d,$0a
  1695.         dc.b " Uwe Seimet",$0d,$0a
  1696.         dc.b " Buchenlochstraße 29",$0d,$0a
  1697.         dc.b " 6750 Kaiserslautern",$0d,$0a
  1698.         dc.b " Telefon: 0631/21237",$0d,$0a,$0a,$0a
  1699.         dc.b "    Belegung der Sondertasten:",$0d,$0a,$0a
  1700.         dc.b "Help: System-Informationen",$0d,$0a
  1701.         dc.b "CTRL: Scrolling verlangsamen",$0d,$0a
  1702.         dc.b " ALT: Scrolling anhalten",$0d,$0a
  1703.         dc.b " Tab: RUN/STOP",$0d,$0a
  1704.         dc.b "Undo: Restore",$0d,$0a
  1705.         dc.b "  F5: Bildschirmfarbe ändern",$0d,$0a
  1706.         dc.b "  F6: Zeichenfarbe ändern",$0d,$0a
  1707.         dc.b "  F7: Hardcopy",$0d,$0a
  1708.         dc.b "  F8: Bitmap überwachen: "
  1709. ff8:    dc.b "+",$0d,$0a
  1710.         dc.b "  F9: Bildschirmspeicher überwachen: "
  1711. ff9:    dc.b "+",$0d,$0a
  1712.         dc.b " F10: Emulator verlassen",0
  1713.  
  1714.  
  1715.         bss
  1716.  
  1717. oldcol: ds 16
  1718.  
  1719. sctab:  ds 25
  1720.  
  1721. grtab:  ds 256
  1722.  
  1723. keysav: ds.l 1
  1724.  
  1725. evntsav:ds.l 1
  1726.  
  1727. critsav:ds.l 1
  1728.  
  1729. set:    ds.b 8192
  1730.  
  1731. grbss:  ds.b 4096*3
  1732.  
  1733. rezflg: ds.b 1
  1734.  
  1735. mflg:   ds.b 1
  1736.  
  1737.         ds.l 100
  1738. stack:  ds 1
  1739.